<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    

<script>

    // '^'是开头
    let reg = /^abc/
    console.log(reg.exec("abcd")) // true
    console.log(reg.exec("dabcd")) // false

    // '$'是结尾
    reg = /cd$/
    console.log(reg.exec("soifasjocd")) // true
    console.log(reg.exec("soifasjocdda")) // false

    // 两个组合起来就是精确匹配
    reg = /^ad$/
    console.log(reg.exec("ad"))
    console.log(reg.exec("adafad"))

    /*
    * : 重复零次或更多次，也就是任意次
    + : 重复一次或更多次，也就是至少一次
    ? : 重复零次或一次，也就是最多一次
    */

    reg = /^哈*/
    console.log(reg.exec("")) // true
    console.log(reg.exec("哈哈哈哈")) // true

    /*
    {n} : 重复n次
    {n,} : 重复至少n次
    {n, m} : 重复n到m次
    */

    reg = /^哈{3}/
    console.log(reg.exec("哈"))
    console.log(reg.exec("哈哈"))
    console.log(reg.exec("哈哈哈"))
    console.log(reg.exec("哈哈哈哈"))

    // [abc] 只选其中个的一个字符

    // [a-z]表示a-z 26个字母都行
    // [a-zA-Z]表示大小写都行
    // [0-9]表示0～9数字都行

    reg = /^[你我1-9]/
    console.log(reg.exec("你好哈哈"))
    console.log(reg.exec("1你好哈哈"))
    console.log(reg.exec("我你好哈哈"))
    console.log(reg.exec("0我你好哈哈"))

    // [^abc]中括号里面的^表示取反，除了里面的那些，其余都行

    // '.'匹配除了换行符以外的任意一个字符
    // .*就表示匹配任意字符了
    reg = /^.orld/;
    console.log(reg.exec("world")) // true
    console.log(reg.exec("\norld")) // false
    console.log(reg.exec("\torld")) // true

    
    // ()表示组合
    reg = /^(12){3}/
    console.log(reg.exec("121212"))

    // 如果想匹配'('就要进行转义
    reg = /^\(/
    console.log(reg.exec("(fsfsd)"))
    

    // 预定义字符：
    // \d: 所有0-9的数字，相当于[0-9]
    // \D: 所有0-9以外的字符，相当于[^0-9]
    // \w: 任意字母、数字、下划线，相当于[a-zA-Z0-9_]
    // \W: 除了所有字母、数字、下划线以外的字符，相当于[^a-zA-Z0-9_]
    // \s: 匹配空格（包括换行符、制表符、空格等），相当于[\t\r\n\v\f]
    // \S: 匹配非空格字符，相当于[^\t\r\n\v\f]


    // 如果要同时匹配多个正则表达式，可以使用 '|' 进行分割
    reg = /^a|^b/
    console.log(reg.exec("absfds"))
    console.log(reg.exec("babsfds"))

    
</script>
</body>
</html>